package com.demo.scrollbar;

import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class ScrollBarSample extends Application {

	final ScrollBar sc = new ScrollBar();// 创建一个ScrollBar类型对象
	final VBox vb = new VBox();// 创建一个VBox类型布局对象

	@Override
	public void start(Stage stage) {// javaFX的UI组件的启动舞台场景函数，生命周期入口方法
		AnchorPane root = new AnchorPane();// 创建一个节点组对象
		Scene scene = new Scene(root, 1200, 800);// 创建场景对象
		scene.setFill(Color.BEIGE);// 场景填充色
		stage.setScene(scene);// 舞台上布置场景
		stage.setTitle("Scrollbar演示");// 舞台上设置标题
		root.getChildren().addAll(vb, sc);// 节点组添加VboxL类型布局对象和scrollerBar对象

		vb.setStyle("-fx-background-color:#FFE4C4");
		AnchorPane.setLeftAnchor(vb, 0D);
		AnchorPane.setRightAnchor(vb, 0D);

		sc.setMin(0);// 设置scrollBar对象的最小值
		sc.setMax(100);// 设置scrollBar对象的活动位置最大值
		sc.setOrientation(Orientation.VERTICAL);// 设置scrollBar对象的朝向，本例中为垂直方向

		AnchorPane.setTopAnchor(sc, 0D);
		AnchorPane.setBottomAnchor(sc, 0D);
		AnchorPane.setRightAnchor(sc, 0D);

		for (int i = 0; i < 10; i++) {// 将Image图片挂载到ImageView类型视图区域对象中，再将ImageView类型对象添加到Vbox布局类型对象的布局区域内，并将Image类型图形对象设置阴影效果

			Pane pane = new Pane();
			pane.setPrefHeight(100);
			pane.setPrefWidth(200);
			pane.setStyle("-fx-background-color:#8A2BE2");
			vb.getChildren().add(pane);// 给vBOX容器中添加ImageView类型对象
		}

		sc.valueProperty().addListener((ObservableValue<? extends Number> ov, Number old_val, Number new_val) -> {// scrollBar对象进行改变值事件监听处理机制
			double scroolHeight = vb.getHeight() - scene.getHeight();
			if (scroolHeight >0) {
				vb.setLayoutY(new_val.doubleValue() / 100.0 * scroolHeight * -1);// 当scrollBar对象被滑动时将vBox容器对象的Y轴坐标设置为滑动后的逆向取值
			}
		});

		stage.show();// 显示舞台
	}

	public static void main(String[] args) {
		launch(args);
	}
}
